#!/bin/bash

# Slackware build script for ROOT

# written by Jože Zobec <jozze.zepl@gmail.com>

# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

# Modified by the slackbuilds.org project

cd $(dirname $0) ; CWD=$(pwd)

PRGNAM=root
VERSION=${VERSION:-6.26.10}
BUILD=${BUILD:-1}
TAG=${TAG:-_SBo}
PKGTYPE=${PKGTYPE:-tgz}

if [ -z "$ARCH" ]; then
  case "$( uname -m )" in
    i?86) ARCH=i586 ;;
    arm*) ARCH=arm ;;
       *) ARCH=$( uname -m ) ;;
  esac
fi

if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
  echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE"
  exit 0
fi

TMP=${TMP:-/tmp/SBo}
PKG=$TMP/package-$PRGNAM
OUTPUT=${OUTPUT:-/tmp}

if [ "$ARCH" = "i586" ]; then
  SLKCFLAGS="-march=i586 -mtune=i686"
elif [ "$ARCH" = "i686" ]; then
  SLKCFLAGS="-march=i686 -mtune=i686"
elif [ "$ARCH" = "x86_64" ]; then
  SLKCFLAGS="-fPIC"
else
  SLKCFLAGS=""
fi

CXXSTD=${CXXSTD:-17}

set -e

rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
rm -rf $PRGNAM-$VERSION
tar xvf $CWD/$PRGNAM\_v$VERSION.source.tar.gz
mv root-$VERSION src
mkdir -p $PRGNAM-$VERSION
mv src $PRGNAM-$VERSION
cd $PRGNAM-$VERSION

chown -R root:root .
find -L . \
 \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \
  -o -perm 511 \) -exec chmod 755 {} \+ -o \
 \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
  -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \+

# prefix where to install stuff
PREFIX=/opt/ROOT-${VERSION}
mkdir -p build
cd build
CFLAGS="$SLKCFLAGS" \
CXXFLAGS="$SLKCFLAGS" \
cmake ../src \
  -DCMAKE_INSTALL_PREFIX=$PREFIX \
  -DCMAKE_C_FLAGS:STRING="$SLKCFLAGS" \
  -DCMAKE_CXX_FLAGS:STRING="$SLKCFLAGS" \
  -DCMAKE_CXX_STANDARD=${CXXSTD} \
  -DCMAKE_INSTALL_PYTHONDIR=lib \
  -DMAN_INSTALL_DIR=$PREFIX/man \
  -Dbuiltin_cfitsio=OFF \
  -Dbuiltin_davix=OFF \
  -Dbuiltin_fftw3=OFF \
  -Dbuiltin_gsl=OFF \
  -Dbuiltin_openssl=OFF \
  -Dbuiltin_tbb=OFF \
  -Dbuiltin_vc=OFF \
  -Dbuiltin_vdt=OFF \
  -Dbuiltin_veccore=OFF \
  -Dclad=OFF \
  -Dalien=OFF \
  -Dall=OFF \
  -Darrow=OFF \
  -Dassan=OFF \
  -Dasserts=OFF \
  -Dbuiltin_freetype=OFF \
  -Dfftw3=ON \
  -Dbuiltin_glew=OFF \
  -Dbuiltin_clang=ON \
  -Dbuiltin_cling=ON \
  -Dbuiltin_llvm=ON \
  -Dbuiltin_lz4=OFF \
  -Dbuiltin_lzma=OFF \
  -Dbuiltin_nlohmannjson=ON \
  -Dbuiltin_openui5=ON \
  -Dbuiltin_pcre=OFF \
  -Dbuiltin_unuran=OFF \
  -Dbuiltin_xrootd=OFF \
  -Dbuiltin_xxhash=OFF \
  -Dbuiltin_zlib=OFF \
  -Dbuiltin_zstd=OFF \
  -Dccache=OFF \
  -Dcefweb=OFF \
  -Dclingtest=OFF \
  -Dcocoa=OFF \
  -Dcompression_default=zlib \
  -Dcoverage=OFF \
  -Dcuda=OFF \
  -Dcudnn=OFF \
  -Dcxx_modules=OFF \
  -Ddataframe=ON \
  -Ddavix=OFF \
  -Ddcache=OFF \
  -Ddev=OFF \
  -Ddistcc=OFF \
  -Dexceptions=ON \
  -Dfail-on-missing=ON \
  -Dfcgi=OFF \
  -Dfitsio=ON \
  -Dfortran=ON \
  -Dgdml=ON \
  -Dgfal=OFF \
  -Dgminimal=OFF \
  -Dgnuinstall=OFF \
  -Dgsl_shared=ON \
  -Dmathmore=ON \
  -Dgviz=OFF \
  -Dhttp=ON \
  -Djemalloc=OFF \
  -Dlibcxx=OFF \
  -Dmacos_native=OFF \
  -Dmemory_termination=OFF \
  -Dminimal=OFF \
  -Dminuit2=ON \
  -Dmlp=ON \
  -Dmonalisa=OFF \
  -Dmpi=OFF \
  -Dmysql=OFF \
  -Dodbc=OFF \
  -Dopengl=ON \
  -Doracle=OFF \
  -Dpgsql=OFF \
  -Dpyroot=ON \
  -Dpyroot_legacy=OFF \
  -Dpythia6=OFF \
  -Dpythia6_nolink=OFF \
  -Dpythia8=OFF \
  -Dqt5web=OFF \
  -Dr=OFF \
  -Droofit=ON \
  -Droot7=ON \
  -Drootbench=OFF \
  -Droottest=OFF \
  -Drpath=OFF \
  -Druntime_cxxmodules=ON \
  -Dshadowpw=OFF \
  -Dshared=ON \
  -Dsoversion=ON \
  -Dspectrum=ON \
  -Dsqlite=OFF \
  -Dssl=ON \
  -Dtcmalloc=OFF \
  -Dtest_distrdf_pyspark=OFF \
  -Dtesting=OFF \
  -Dtmva=ON \
  -Dtmva-cpu=ON \
  -Dtmva-gpu=OFF \
  -Dtmva-pymva=ON \
  -Dtmva-rmva=OFF \
  -Dunuran=OFF \
  -During=OFF \
  -Dvc=OFF \
  -Dvdt=OFF \
  -Dveccore=OFF \
  -Dvmc=OFF \
  -Dwebgui=ON \
  -Dwin_broken_tests=OFF \
  -Dwinrtdebug=OFF \
  -Dx11=ON \
  -Dxml=ON \
  -Dxproofd=OFF \
  -Dxrootd=OFF \
  -DCMAKE_BUILD_TYPE=Release ../src
make
make install/strip DESTDIR=$PKG

find $PKG | xargs file | grep -e "executable" -e "shared object" | grep ELF \
  | cut -f 1 -d : | xargs strip --strip-unneded 2> /dev/null || true

find $PKG$PREFIX/man -type f -exec gzip -9 {} \;

mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
# We are still in build directory
# Copy documentation to system; also to ROOTSYS (ROOT expects it there)
cp -a README/ README.md LICENSE LGPL2_1.txt ../src/CONTRIBUTING.md \
    $PKG/usr/doc/$PRGNAM-$VERSION
find $PKG/usr/doc/$PRGNAM-$VERSION -type f -exec chmod 644 {} \;
cp -a README/ LICENSE \
    $PKG$PREFIX
# README is a directory
find $PKG$PREFIX/README -type d -exec chmod 755 {} \;
find $PKG$PREFIX/README -type f -exec chmod 644 {} \;
chmod -R 644 $PKG$PREFIX/LICENSE
cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild

# Install some profile.d scripts to use the right paths
mkdir -p $PKG/etc/profile.d
# Start with tcsh
echo "setenv ROOTSYS $PREFIX"                   >  $PKG/etc/profile.d/root.csh
echo "set path = ( \$path $PREFIX/bin )"        >> $PKG/etc/profile.d/root.csh
echo "setenv MANPATH \${MANPATH}:$PREFIX/man"   >> $PKG/etc/profile.d/root.csh
echo "if ( ! \$?PYTHONPATH ) then"              >> $PKG/etc/profile.d/root.csh
echo "setenv PYTHONPATH $PREFIX/lib"            >> $PKG/etc/profile.d/root.csh
echo "else"                                     >> $PKG/etc/profile.d/root.csh
echo "if ( \"\$PYTHONPATH\" != \"\") then"     >> $PKG/etc/profile.d/root.csh
echo "setenv PYTHONPATH \$PYTHONPATH:$PREFIX/lib">> $PKG/etc/profile.d/root.csh
echo "else"                                     >> $PKG/etc/profile.d/root.csh
echo "setenv PYTHONPATH $PREFIX/lib"            >> $PKG/etc/profile.d/root.csh
echo "endif"                                    >> $PKG/etc/profile.d/root.csh
echo "endif"                                    >> $PKG/etc/profile.d/root.csh
# And bash
echo "ROOTSYS=$PREFIX"                          >  $PKG/etc/profile.d/root.sh
echo "PATH=\$PATH:$PREFIX/bin"                  >> $PKG/etc/profile.d/root.sh
echo "MANPATH=\$MANPATH:$PREFIX/man"            >> $PKG/etc/profile.d/root.sh
echo "if [ -z \"\${PYTHONPATH}\" ]; then"       >> $PKG/etc/profile.d/root.sh
echo "    export PYTHONPATH=$PREFIX/lib"        >> $PKG/etc/profile.d/root.sh
echo "else"                                     >> $PKG/etc/profile.d/root.sh
echo "    export PYTHONPATH=\$PYTHONPATH:$PREFIX/lib" \
                                                >> $PKG/etc/profile.d/root.sh
echo "fi"                                       >> $PKG/etc/profile.d/root.sh
chmod +x $PKG/etc/profile.d/root.*

mkdir -p $PKG/etc/ld.so.conf.d
echo "$PREFIX/lib"                      >  $PKG/etc/ld.so.conf.d/root.conf

mkdir -p $PKG/install
cat $CWD/slack-desc > $PKG/install/slack-desc
cat $CWD/doinst.sh > $PKG/install/doinst.sh

cd $PKG
/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE
